package org.monster.context.jar;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

/**
 * Jar抽出器
 *
 * @author Monster
 */
public class JarExtractor {

    /**
     * 列举
     */
    private Enumeration<JarEntry> jarEntries;
    /**
     * 文件条目
     */
    private JarEntry entry = null;

    /**
     * 从jar提取class文件
     *
     * @param file 文件
     * @return 字符串
     * @throws IOException 输入输出异常
     */
    public List<String> extractClass(File file) throws IOException {
        List<String> classpaths = new ArrayList<String>();
        JarFile jarFile = new JarFile(file);
        Enumeration<JarEntry> entries = jarFile.entries();
        while (entries.hasMoreElements()) {
            JarEntry entry = entries.nextElement();
            if (entry.getName().endsWith(".class")) {
                String classPath = getJarClassPath(entry.getName());
                classpaths.add(classPath);
            }
        }
        jarFile.close();
        return classpaths;
    }


    /**
     * 获取 jar类路径
     * 将jar条目路径转换成classpath路径
     *
     * @param path 路径
     * @return 类路径
     */
    public String getJarClassPath(String path) {
        path = path.substring(0, path.length() - 6);
        return path.replace("/", ".");
    }
}
